package appmodel;

import dominio.JardinZen;
import dominio.Planta;

import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

public class ZenAppModel {
	
	boolean estoyEnTerrestre = true;
	private Collection<Planta> plantas;
	private JardinZen zen;
	private List<Planta> jardinZen;
	String txtBuscado;
	String propiedad;
	Integer criterio;
	
	public ZenAppModel(JardinZen zen) {
		this.zen = zen;
		this.initialize();
	}
	
	public void irAlOtroJardin() {
		this.estoyEnTerrestre = !this.estoyEnTerrestre;
		this.initialize();
	}
	
	protected void initialize() {
		this.txtBuscado = "";
		this.propiedad = "nombre";
		this.criterio = 1;
		this.jardinZen = estoyEnTerrestre ? zen.getJardinTerrestre() : zen.getJardinAcuatico();
	}
	
	public void buscar() {
		SortedSet<Planta> result = new TreeSet<Planta>(this.getComparator(this.propiedad, this.criterio));

		for(Planta planta : this.jardinZen) {
			if(planta.getNombre().toLowerCase().contains(this.txtBuscado.toLowerCase())) {
				result.add(planta);
			}
		}

		this.plantas = result;
	}
	
	protected Comparator<Planta> getComparator(String propiedad, Integer criterio) {
		return new Comps(criterio).get(propiedad);
	}

	/////////////////////////////////////////////
	///////////////  ACCESORS  //////////////////
	/////////////////////////////////////////////
	
	public String getType() {
		return (this.estoyEnTerrestre) ? "TERRESTRE" : "ACUATICO";
	}
	
	public String getTxtBuscado() {
		return txtBuscado;
	}

	public void setTxtBuscado(String txtBuscado) {
		this.txtBuscado = txtBuscado;
	}

	public String getPropiedad() {
		return propiedad;
	}

	public void setPropiedad(String propiedad) {
		this.propiedad = propiedad;
	}

	public Integer getCriterio() {
		return criterio;
	}

	public void setCriterio(Integer criterio) {
		this.criterio = criterio;
	}

	public Collection<Planta> getPlantas() {
		return plantas;
	}

	public void setPlantas(Collection<Planta> plantas) {
		this.plantas = plantas;
	}

	public List<Planta> getJardinZen() {
		return jardinZen;
	}
}
